Iniciando JBoss sem privilégios - Erro: "java.net.SocketException: Permission denied" [Resolvido]

Publicado por Filippe em 11/12/2012

[ Hits: 11.340 ]

 


Iniciando JBoss sem privilégios - Erro: "java.net.SocketException: Permission denied" [Resolvido]



O erro em si:
11:42:59,844 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC00001: Failed to start service jboss.remoting.server.remoting-connector: org.jboss.msc.service.StartException in service jboss.remoting.server.remoting-connector: JBAS017113: Failed to start service
     at org.jboss.as.remoting.AbstractStreamServerService.start(AbstractStreamServerService.java:111)
     at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jbossmsc-1.0.2.GA.jar:1.0.2.GA]

     at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [rt.jar:1.6.0_22]
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [rt.jar:1.6.0_22]
     at java.lang.Thread.run(Thread.java:662) [rt.jar:1.6.0_22]
Caused by: java.net.SocketException: Permission denied
     at sun.nio.ch.Net.bind(Native Method) [rt.jar:1.6.0_22]
     at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:119) [rt.jar:1.6.0_22]
     at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59) [rt.jar:1.6.0_22]
     at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:52) [rt.jar:1.6.0_22]
     at org.xnio.nio.NioXnioWorker.createTcpServer(NioXnioWorker.java:287)
     at org.xnio.XnioWorker.createStreamServer(XnioWorker.java:135)
     at org.jboss.remoting3.remote.RemoteConnectionProvider$ProviderInterface.createServer(RemoteConnectionProvider.java:209)
     at org.jboss.as.remoting.AbstractStreamServerService.start(AbstractStreamServerService.java:101)
¿ 5 more


O erro acima ocorre porque o JBoss está tentando abrir um socket em uma porta menor que 1000. Por padrão, sistemas Unix like não permitem que usuários "mortais" (sem permissões) abram sockets nestas portas.

Para fazer um trace do erro, neste caso, não é necessário habilitar o debug do log para obter mais informações, somente com o log mostrando mensagens do nível INFO já conseguimos obter as informações necessárias.

Solução

Suba o JBoss como root:

# sh standalone.sh

Acompanhe os logs e procure pela linha do erro anterior destacado em negrito no trecho acima:

O erro destacado mostra que o erro ocorreu ao tentar subir o serviço remoting (org.jboss.as.remoting.AbstractStreamServerService.start).

Subindo o JBoss como root, verifique a linha semelhante:

[org.jboss.as.remoting] (MSC service thread 1-1) JBAS017100: Listening on /106.116.152.176:447


Veja que conseguimos obter a porta que o JBoss estava tentando subir e que era a causadora do erro.

Para contornar esta situação, iremos alterar a porta deste serviço, para isso, edite o arquivo "standalone.xml" ou "domain.xml" e procure pelo bloco abaixo (geralmente no final do arquivo):

<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port- offset:0}">
<socket-binding name="management-native" interface="management" port="${jboss.management.native.port:9999}"/>
<socket-binding name="management-http" interface="management" port="${jboss.management.http.port:9990}"/>
<socket-binding name="management-https" interface="management" port="${jboss.management.https.port:9443}"/>
<socket-binding name="ajp" port="8109"/>
<socket-binding name="http" port="8180"/>
<socket-binding name="https" port="8543"/>
<socket-binding name="osgi-http" interface="management" port="8190"/>
<socket-binding name="remoting" port="447"/>
<socket-binding name="txn-recovery-environment" port="4712"/>
<socket-binding name="txn-status-manager" port="4713"/>
<outbound-socket-binding name="mail-smtp">
<remote-destination host="localhost" port="25"/>
</outbound-socket-binding>
</socket-binding-group>

Repare no serviço "remoting" no trecho acima, altere-o para alguma porta qualquer, eu optei para mudá-la para: 4447

<socket-binding name="remoting" port="4447"/>

Após salvar e fechar, inicie o JBoss novamente com o usuário que deseja, para mais fácil entendimento, eu sempre uso o usuário: jboss

# sudo -u jboss sh standalone.sh

Acompanhe os logs e veja que o erro não irá mais acontecer:
INFO [org.jboss.as.remoting] (MSC service thread 1-1) JBAS017100: Listening on /103.113.152.176:4447


A dica na íntegra, encontra-se em:
Outras dicas deste autor

Recuperando senhas de datasources encriptados em JBoss

Classe em Java para validar regex no padrão: dd/mm/aaaa hh:mm:ss

Introdução e configuração básica e rápida do iptables

Cuidado com o "sl"

Configuração de internet móvel 3G CTBC no Ubuntu

Leitura recomendada

Sinal EOF ou EOT com sockets

Transferência de arquivos binários em Java

Usando sockets em Java - Comunicação com um servidor

Sistemas Distribuídos - Aplicação simples Java RMI

Chmod + dicas

  

Comentários
[1] Comentário enviado por spolti em 25/07/2013 - 12:31h

O link foi alterado para:
http://www.hrstatus.com.br/2012/12/caused-by-java-net-socketexception-permission-denied-quando-inici...



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts